from django.http import JsonResponse
from django.shortcuts import render

from goods.models import Goods




def cart(request):
    session_goods = request.session.get('goods')
    goods_all = []
    if request.method == 'GET':
        # 如果没有登录，则从session中取出商品的信息
        # 如果登录，还是从session中取数据（保证数据库中的商品和session中商品一致）
        if session_goods:
            # 获取session中所有的商品id值
            for goods in session_goods:
                cart_goods = Goods.objects.filter(pk=goods[0]).first()
                is_select = int(goods[2])
                goods_number = int(goods[1])
                unit_total_price = goods_number * int(cart_goods.shop_price)
                goods_all.append([cart_goods, goods_number, unit_total_price, is_select])
            # 获取商品对象
            # 前台需要商品信息，商品的个数，商品的总价、勾选状态
            # 后台返回结构
        return render(request, 'cart.html', {'goods_all': goods_all})
    if request.method == 'POST':
        # 获取勾选状态
        is_select = 1 if(request.POST.get('is_select') == 'true') else 0

        # 获取是否删除的信息
        is_delete = int(request.POST.get('is_delete'))
        # 获取修改了数量的商品id
        goods_id = request.POST.get('goods_id')
        # 将商品修改后的数量存于session中
        for goods in session_goods:
            if int(goods[0]) == int(goods_id):
                if is_select:
                    goods[1] = int(request.POST.get('num'))
                    goods[2] = 1
                    if is_delete:
                        # 传入要删除的消息，就将这个商品从商品的列表中移除
                        session_goods.remove(goods)
                else:
                    goods[2] = 0
                    # 在没有勾选的情况下，禁止删除
                    is_delete = 0
                break
        request.session['goods'] = session_goods
        request.session['goods_count'] = len(session_goods)
        return JsonResponse({'code':200,'msg':'成功','is_delete':is_delete})


def add_cart(request):
    if request.method == "POST":
        # 加入到购物车，需要判断用户是否登录
        # 如果登录，加入到购物车中的数据，是加入到数据库中购物车表中（设计不好的方法）

        # 如果登录，加入到购物车中的数据，存储到session中（设计相对比较好的）
        # 如果没有登录，则加入购物车中的数据，是加入到session中
        # session中存储数据：商品id，商品数量，商品的选择状态
        # 如果登录，则把session的数据同步到数据库中（中间件同步数据）

        # 1.获取一个商品id和商品数量
        goods_id = int(request.POST.get('goods_id'))
        goods_num = int(request.POST.get('goods_num'))
        # 2.组装存到session中的数据格式（一个商品的状态）
        goods_list = [goods_id, goods_num, 1]
        # 将多个商品的状态都统计到一个列表中，作为value值
        # {'goods':[[1,2,1],[2,5,1......]]}

        if request.session.get('goods'):
            # 说明session中存储了加入到购物车的商品信息
            # 判断当前加入到购物车中的数据，是否已经存在于session中
            # 如果存在，则修改session中该商品的数量
            # 如果不存在，则新增
            flag = 0
            # 获取存放商品列表的列表
            session_goods = request.session['goods']
            for goods in session_goods:
                # 判断如果加入到购物车中的数据，已经存在于session中，则修改
                if int(goods[0]) == goods_id:
                    goods[1] = int(goods_num)
                    flag = 1
            if not flag:
                # flag为0，就是存在的session_goods中没有这个商品，就添加到商品列表就行了：
                session_goods.append(goods_list)
        else:
            session_goods=[]
            session_goods.append(goods_list)
        # 取出来的列表更改了，要将列表再保存回去
        request.session['goods'] = session_goods
        # 计算商品列表的元素长度， 也就是商品的个数
        goods_count = len(session_goods)
        request.session['goods_count'] = goods_count
        return JsonResponse({'code': 200, 'msg': '请求成功', 'goods_count': goods_count})




